Job scheduling addresses the allocation of resources to jobs over time. The one or more jobs to be scheduled for execution on the resources may be known in advance, or such jobs may be submitted on an ongoing basis. Each job may have different demands such as required memory, required processor speed, required licenses, required completion time, etc. The resources available to execute each job may include one or more machines with one or more processors (e.g., personal computers, mainframes, servers, grid clusters, PDAs, mobile phones, storage devices, etc.). Multiple resources may be connected via a network (e.g., the Internet) with wired and/or wireless segments. Further, the quantity and type of available resources may change over time as new resources are added and existing resources become unavailable (e.g., removed for service, removed for power conservation, resource failure, etc.).
In view of the above, job scheduling is the task of deciding which jobs should be executed by which resources, and in what order. The decision process may occur once, or may be repeated as new jobs are submitted, and/or resources change (e.g., resources become more plentiful, suffer a depletion, etc.). Job scheduling has been studied extensively in many varieties and in many viewpoints. Many mathematical models have been created to study different scenarios in job scheduling.